package com.elitel.frame.main.config.serviceaccess.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 服务访问次数限制
 * @author hi_bj
 */
public class ServiceAccessTimeLimit {
    /**
     * 访问次数记录
     * 约定 Map的Key为 服务和AppCode拼接的字符串 ，Value是日期 yyyyMMdd和访问次数拼接的字符串
     */
    private static Map<String, String> accessTimesMap = new ConcurrentHashMap<>();

    /**
     * 获取当前AppCode 的服务访问次数
     * 约定 Map的Key为 服务和AppCode拼接的字符串 ，Value是日期 yyyyMMdd和访问次数拼接的字符串
     * @param serviceId
     * @param appCode
     * @return
     */
    public static Long getAndSet(String serviceId, String appCode) {
        String key = appCode + "_" + serviceId;
        String oldVal = accessTimesMap.get(key);
        //记录当前日期
        String curDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
        long count = 0;
        if (oldVal != null) {
            String oldDate = oldVal.substring(0, 8);
            if (curDate.equals(oldDate)) {
                count = Long.parseLong(oldVal.substring(8));
            }
        }
        long newVal = count + 1;
        accessTimesMap.put(key, curDate + newVal);
        return newVal;
    }

}
